// miniprogram/pages/blogEdit/blogEdit.js
const MAX_SIZE_NUM = 140 // 最大输入字数
const MAX_IMAGE_COUNT = 9 // 最多添加的图片数
const db = wx.cloud.database()
let userInfo = {}
let content = '' //用户输入的内容
Page({
  /**
   * 页面的初始数据
   */
  data: {
    wordsNum:0,
    footerBottom: 0,
    images: [],
    showAddImage:true
  },
  onInput(e){
    let wordsNum = e.detail.value.length
    if (wordsNum >= MAX_SIZE_NUM) {
        wordsNum= `最大字数为${MAX_SIZE_NUM}`
    }
    this.setData({
      wordsNum
    })
    content = e.detail.value
  },
  onFocus(e) {
    this.setData({
      // 键盘弹起的高度e.detail.height
      footerBottom: e.detail.height
    })
  },
  onBlur(e) {
    this.setData({
      footerBottom: 0
    })
  },
  addImage(){
    let count = MAX_IMAGE_COUNT - this.data.images.length
    wx.chooseImage({
      count,
      success:(res) => {
        // console.log(res);
        this.setData({
          images: this.data.images.concat(res.tempFilePaths)
        })
      }
    })
  },
  deleteImage(e) {
    this.data.images.splice(e.currentTarget.dataset.index,1)
    this.setData({
      images: this.data.images
    })
  },
  onPreviewImage(e){
    wx.previewImage({
      urls: this.data.images,
      current: e.currentTarget.dataset.url
    })
  },
  send() {
    if (content.trim() == '') {
      wx.showModal({
        title: '请输入内容'
      })
      return
    }

    wx.showLoading({
      title: '发布中',
      mask:true  // 显示透明蒙层，防止触摸穿透
    })
    let promiseArr = []
    let fileIds = [] 
    for (let i = 0; i < this.data.images.length; i++) {
      let p = new Promise((resolve,reject) => {
        let item = this.data.images[i]
        // 文件拓展名。exec:一个在字符串中执行查找匹配的RegExp方法，它返回一个数组（未匹配到则返回 null）。
        let suffix = /\.\w+$/.exec(item)[0]
        /* 我在云存储中创建了一个叫blog的文件夹，'blog/'后面其实就是上传文件成功后，blog目录下文件的名字。由于名字不能重复，否则后面上传的会覆盖掉前面上传的文件，因此需要保证每次上传的文件名不同，同时，文件名的后缀也不能写死，因为你不知道用户上传的是gif还是jpg等，假如写死成jpg，那么用户上传的gif就会失效，因此还要获取到用户上传文件的后缀名。
          */
        wx.cloud.uploadFile({
          cloudPath: `blog/${Date.now()}-${Math.random()*100000}${suffix}`,
          filePath: item, // 需要上传的文件路径
          success: res => {
            fileIds = fileIds.concat(res.fileID) // res.fileID是图片在云存储中的路径
            resolve()
          },
          fail: err => {
            reject()
          }
        })
      })
      promiseArr.push(p)
    }
    // 因为上传文件是异步的，我们不知道文件什么时候文件才上传成功，所以可以利用Promise.all方法
    Promise.all(promiseArr).then(res => {
      db.collection('blog').add({
        data: {
          ...userInfo,
          img: fileIds,
          content,
          createTime: db.serverDate()
        }
      }).then(() => {
        wx.hideLoading()
        wx.showToast({
          title: '发布成功',
        })
        wx.navigateBack()
        let pages = getCurrentPages() //获取当前页面栈
        console.log(pages);
        pages[0].onPullDownRefresh() //调用了父页面blog的方法
        
      }).catch(() => {
        wx.hideLoading()
        wx.showToast({
          title: '发布失败',
        })
      })
    })
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    userInfo = options
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})